package org.pictual.util;

import java.util.ArrayList;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import org.apache.log4j.Logger;

public class Mail {

	private static Properties props;
	private static Session session;
	private static MimeMessage message;
	
	private static String email_pictual="dicpictual@gmail.com";
	private static String email_pass="gijon2000";
	private static String email_jorge="jorge.guerra.canal@gmail.com";
	private static String email_pablo="pablofers@hotmail.com";
	
	protected static Logger log= Logger.getLogger(Mail.class);

	private static void cargarDatos(){
		props = new Properties();

		props.setProperty("mail.transport.protocol" , "smtp"); 
		props.setProperty("mail.smtp.starttls.enable","true"); 
		props.setProperty("mail.smtp.host", "smtp.gmail.com");
		props.setProperty("mail.smtp.ssl.trust", "smtp.gmail.com");
		props.setProperty("mail.smtp.port", "465"); 
		props.setProperty("mail.smtp.auth","true"); 
		props.setProperty("mail.smtp.user", email_pictual); 
		
		props.put("mail.smtp.auth", "true");
		props.put("mail.smtp.starttls.enable", "true");
		props.put("mail.smtp.host", "smtp.gmail.com");
		props.put("mail.smtp.port", "587");

		session = Session.getDefaultInstance(props, null); 

		message = new MimeMessage(session); 
	}
	
	private static void enviarMail() throws MessagingException{
		Transport t = session.getTransport("smtp");
		t.connect(email_pictual, email_pass); 
		t.sendMessage(message,message.getAllRecipients());
		t.close(); 
	}

	public static void enviar(ArrayList<String> palabras, String idioma, String wiki, long t, boolean sonImagenes){
		cargarDatos();
		if(!sonImagenes) log.info("MAIL - Carga masiva de palabras a la BBDD");
		else log.info("MAIL - Carga masiva de imágenes a la BBDD");
		try {
			Address emails[]={
					new InternetAddress(email_jorge),
					new InternetAddress(email_pablo)
			};
			
//			Address emailsBCC[]={
//					new InternetAddress("email_pictual")
//			};
			
			message.setFrom(new InternetAddress(email_pictual));
			message.addRecipients(Message.RecipientType.TO, emails);
//			message.addRecipients(Message.RecipientType.BCC, emailsBCC);

			if(!sonImagenes) message.setSubject("Pictual - Carga masiva de palabras a la BBDD");
			else message.setSubject("Pictual - Carga masiva de imágenes a la BBDD");
			
			String cadena="";
			if(!sonImagenes) cadena = "<p>Se añaden las siguientes palabras por carga masiva: </p>";
			else cadena = "<p>Se añaden las siguientes imágenes de palabras por carga masiva: </p>";
			
					for(String palabra: palabras){

						cadena+="<p><a href=\"http://www.pictual.org/data.do?source=database&query="+palabra+"&from="+idioma+"&to="+wiki+"\" >"+palabra+"</a>("+idioma+"-"+wiki+")</p>";
					}
			
					if(!sonImagenes) cadena+="<p>La carga ha tardado "+t+" segundos para "+palabras.size() + " palabras</p>";
					else cadena+="<p>La carga ha tardado "+t+" segundos para descargar las imagenes de "+ palabras.size() +" palabras</p>";
			
			message.setText(cadena,
					"UTF-8",
					"html");
			enviarMail();
		 
		} catch (AddressException e) {
			log.error("AddressException", e);
		} catch (MessagingException e) {
			log.error("MessagingException", e);
		}
	}
	
	
	public static void enviar(String palabra, String idioma, String wiki, long t){
		cargarDatos();
		log.info("MAIL - Se añade la palabra "+palabra+" ("+idioma+"-"+wiki+") a la BBDD");
		try {
			Address emails[]={
					new InternetAddress(email_jorge),
					new InternetAddress(email_pablo)
			};
			
//			Address emailsBCC[]={
//					new InternetAddress(email_pictual)
//			};
			
			message.setFrom(new InternetAddress(email_pictual));
			message.addRecipients(Message.RecipientType.TO, emails);
//			message.addRecipients(Message.RecipientType.BCC, emailsBCC);

			message.setSubject("Pictual - Se añade la palabra "+palabra+" ("+idioma+"-"+wiki+") a la BBDD" ); 
			message.setText(
					"<p>Se ha añadido una palabra a la BBDD de Pictual: </p>"+
					"<p><strong>Palabra: </strong><a href=\"http://www.pictual.org/data.do?source=database&query="+palabra+"&from="+idioma+"&to="+wiki+"\" >"+palabra+"</a></p>"+
					"<p><strong>Idioma: </strong>"+idioma+"</p>"+
					"<p><strong>Diccionario: </strong>"+wiki+"</p>"+
					"<p>La búsqueda ha tardado "+t+" segundos </p>",
					"UTF-8",
					"html");
			
			enviarMail();
		 
		} catch (AddressException e) {
			log.error("AddressException", e);
		} catch (MessagingException e) {
			log.error("MessagingException", e);
		}
	}
	
	public static void main(String[] args) {
		Mail.enviar("sdsfs", "sfdsfd", "sfsfs", 0);
	}
}